package com.yq.day71;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Scanner;

/**
 * @author 3307235355@qq.com
 * @description
 * @since 2022/07/01 20:04
 * <p>
 * 使用反射机制完成学生对象的创建并输出学生信息。
 * 要求：
 * （1）定义一个学生类Student，其中包含姓名(String)、年龄(int)、成绩(int)的属性。
 * （2）编写带参与无参构造方法。
 * （3）重写父类的toString()方法用于输出学生的信息。 （
 * 4）编写测试类TestStudent，
 * 从键盘录入学生的信息格式为(姓名:年龄:成绩)
 * 一次性录入使用“:”分隔，举例(张三:20:90)。
 * （5）使用String类的split方法按照“:”进行分隔。
 * （6）调用Constructor的newInstance()方法并用分隔后的信息初始化学生对象。
 * （7）调用重写父类的toString()方法将学生信息进入输出显示。
 */
public class TestStudent {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        // 键盘录学生的信息
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生的信息，格式（姓名:年龄:成绩）");
        String s = scanner.nextLine();
        String[] s1 = s.split(":");


        //    调用Constructor的newInstance()方法并用分隔后的信息初始化学生对象。
        //    获取学生的的字节码文件对象
        Class<?> aClass = Class.forName("com.yq.day71.Student1");
        //    获取构造方法
        Constructor<?> declaredConstructor = aClass.getDeclaredConstructor(String.class, int.class, int.class);
        //    新建对象
        Object o = declaredConstructor.newInstance(s1[0], Integer.parseInt(s1[1]), Integer.parseInt(s1[2]));
        //    打印
        System.out.println(o);


    }


}
